package com.grant.code;

import com.grant.code.utils.BootView;
import de.felixroske.jfxsupport.AbstractJavaFxApplicationSupport;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Rectangle2D;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Screen;
import javafx.stage.Stage;
import lombok.Getter;
import lombok.Setter;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;

import java.io.IOException;

@SpringBootApplication
@MapperScan("com.grant.code.mapper")
public class Main extends Application {

    private static ApplicationContext context;
    @Getter
    @Setter
    private static Stage primaryStage; // 保存主窗口引用

    public static void main(String[] args) {
        AbstractJavaFxApplicationSupport.launch(Main.class,args);

    }
    @Override
    public void start(Stage primaryStage) throws IOException {
        this.primaryStage = primaryStage; // 关键初始化
        context = SpringApplication.run(Main.class); // 调整到这里

        FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/login.fxml"));
        loader.setControllerFactory(context::getBean);
        Parent root = loader.load();
        Scene scene = new Scene(root);

        // 设置关闭事件处理
        primaryStage.setOnCloseRequest(e -> {
            shutdown(); // 自定义关闭逻辑
        });

//        // 将场景设置为舞台的内容，并显示舞台
//        primaryStage.setX((width-(9.0/25)*width)/2);
//        primaryStage.setY((height-(16.0/25)*height)/2);
        primaryStage.setResizable(false);
        primaryStage.setTitle("电子图片管理系统");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    // 自定义关闭方法
    public static void shutdown() {
        if (context != null && context instanceof ConfigurableApplicationContext) {
            ((ConfigurableApplicationContext) context).close(); // 关闭 Spring 上下文
        }
        Platform.exit(); // 关闭 JavaFX 平台
        System.exit(0);  // 强制终止所有线程
    }
    public static ApplicationContext getContext() {
        if (context == null) {
            context = SpringApplication.run(Main.class);
        }
        return context;
    }

    // 新增的切换登录界面方法
    // 修改后的showLogin方法
    public static void showLogin() {
        try {
            FXMLLoader loader = new FXMLLoader(Main.class.getResource("/fxml/login.fxml"));
            loader.setControllerFactory(context::getBean);
            Parent root = loader.load();

            // 创建新Stage而不是复用原引用
            Stage loginStage = new Stage(); // 新建Stage对象
            Scene scene = new Scene(root);

            loginStage.setResizable(false); // 操作新Stage
            loginStage.setTitle("电子图片管理系统");
            loginStage.setScene(scene);
            loginStage.show();

            // 如果有原窗口，可关闭或隐藏
            if (primaryStage != null) {
                primaryStage.close(); // 或 primaryStage.hide();
            }
            // 更新primaryStage引用（可选）
            primaryStage = loginStage;

        } catch (Exception e) {
            e.printStackTrace();
        }
    }




}